<?php
class Database
{
    private $pdo;

    /**
     * 初始化数据库连接
     *
     * @param string $host 数据库主机地址
     * @param string $dbname 数据库名称
     * @param string $user 用户名
     * @param string $pass 密码
     */
    public function __construct($host, $dbname, $user, $pass)
    {
        try {
            // 创建一个新的PDO实例
            $this->pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $user, $pass);
            // 设置PDO错误模式为异常
            $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            die("Connection failed: " . $e->getMessage());
        }
    }

    /**
     * 执行查询语句并返回结果集
     *
     * @param string $sql SQL查询语句
     * @param array $params 查询参数
     * @return array 结果数组
     */
    public function query($sql, $params = [])
    {
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($params);
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    /**
     * 执行插入、更新或删除操作
     *
     * @param string $sql SQL语句
     * @param array $params 参数
     * @return bool 操作是否成功
     */
    public function execute($sql, $params = [])
    {
        $stmt = $this->pdo->prepare($sql);
        return $stmt->execute($params);
    }

    /**
     * 开始事务
     */
    public function beginTransaction()
    {
        $this->pdo->beginTransaction();
    }

    /**
     * 提交事务
     */
    public function commit()
    {
        $this->pdo->commit();
    }

    /**
     * 回滚事务
     */
    public function rollBack()
    {
        $this->pdo->rollBack();
    }

    /**
     * 关闭数据库连接（通常不需要手动调用，因为PDO会在脚本结束时自动关闭）
     */
    public function close()
    {
        $this->pdo = null;
    }
}
?>